import 'package:flutter_cli/utils/common.dart';
import 'package:flutter_cli/widgets/widget.dart';

/*
    Brightness brightness, // 应用整体主题的亮度。用于按钮之类的小部件，以确定在不使用主色或强调色时选择什么颜色。
    MaterialColor primarySwatch,// 定义一个单一的颜色以及十个色度的色块。
    Color primaryColor, // 应用程序主要部分的背景颜色(toolbars、tab bars 等)
    Brightness primaryColorBrightness, // primaryColor的亮度。用于确定文本的颜色和放置在主颜色之上的图标(例如工具栏文本)。
    Color primaryColorLight, // primaryColor的浅色版
    Color primaryColorDark, // primaryColor的深色版
    Color accentColor, // 小部件的前景色(旋钮、文本、覆盖边缘效果等)。
    Brightness accentColorBrightness, // accentColor的亮度。
    Color canvasColor, //  MaterialType.canvas 的默认颜色
    Color scaffoldBackgroundColor, // Scaffold的默认颜色。典型Material应用程序或应用程序内页面的背景颜色。
    Color bottomAppBarColor, // BottomAppBar的默认颜色
    Color bottomAppBarColor, // BottomAppBar的默认颜色
    Color cardColor, // Card的颜色
    Color dividerColor, // Divider和PopupMenuDivider的颜色，也用于ListTile之间、DataTable的行之间等。
    Color highlightColor, // 选中在泼墨动画期间使用的突出显示颜色，或用于指示菜单中的项。
    Color splashColor,  // 墨水飞溅的颜色。InkWell
    InteractiveInkFeatureFactory splashFactory, // 定义由InkWell和InkResponse反应产生的墨溅的外观。
    Color selectedRowColor, // 用于突出显示选定行的颜色。
    Color unselectedWidgetColor, // 用于处于非活动(但已启用)状态的小部件的颜色。例如，未选中的复选框。通常与accentColor形成对比。也看到disabledColor。
    Color disabledColor, // 禁用状态下部件的颜色，无论其当前状态如何。例如，一个禁用的复选框(可以选中或未选中)。
    Color buttonColor, // RaisedButton按钮中使用的Material 的默认填充颜色。
    ButtonThemeData buttonTheme, // 定义按钮部件的默认配置，如RaisedButton和FlatButton。
    Color secondaryHeaderColor, // 选定行时PaginatedDataTable标题的颜色。
    Color textSelectionColor, // 文本框中文本选择的颜色，如TextField
    Color cursorColor, // 文本框中光标的颜色，如TextField
    Color textSelectionHandleColor,  // 用于调整当前选定的文本部分的句柄的颜色。
    Color backgroundColor, // 与主色形成对比的颜色，例如用作进度条的剩余部分。
    Color dialogBackgroundColor, // Dialog 元素的背景颜色
    Color indicatorColor, // 选项卡中选定的选项卡指示器的颜色。
    Color hintColor, // 用于提示文本或占位符文本的颜色，例如在TextField中。
    Color errorColor, // 用于输入验证错误的颜色，例如在TextField中
    Color toggleableActiveColor,
 */

/// App主体风格
enum ThemeStyle { light, dark, system }

extension ThemeStyleExtension on ThemeStyle {
  String get value => ["light", "dark", "system"][index];
}

class ThemeUtils {
  /// 更改主题
  static changeTheme() {
    Get.changeThemeMode(getThemeMode());
    String value = global.theme.value == ThemeStyle.light.value
        ? ThemeStyle.dark.value
        : ThemeStyle.light.value;
    saveState('String', 'appColor', value);
    global.appColorChange(value);
    Get.changeTheme(global.theme.value == ThemeStyle.light.value
        ? lightTheme()
        : darkTheme());
    hkShowToast("主题切换成功~");
  }

  ///  获取getThemeMode
  static ThemeMode getThemeMode() {
    switch (global.theme.value) {
      case ThemeStyle.dark:
        return ThemeMode.dark;
      case ThemeStyle.light:
        return ThemeMode.light;
      default:
        return ThemeMode.system;
    }
  }

  ///白天主题
  static lightTheme() {
    return ThemeData(
        primaryColor: const Color(0xff55c9c4),
        primaryColorLight: const Color.fromRGBO(255, 255, 255, 1),
        primaryColorDark: Colors.black,
        splashColor: Colors.transparent,
        brightness: Brightness.dark,
        visualDensity: VisualDensity.adaptivePlatformDensity,
        hoverColor: const Color.fromRGBO(0, 110, 255, 0.2),
        unselectedWidgetColor: const Color.fromRGBO(247, 250, 255, 1),
        hintColor: const Color.fromRGBO(232, 236, 243, 1),
        scaffoldBackgroundColor: const Color.fromRGBO(245, 245, 245, 1),
        textTheme: const TextTheme(
          displayLarge: TextStyle(
              color: Color.fromRGBO(51, 51, 51, 1),
              fontWeight: FontWeight.bold),
          displaySmall: TextStyle(
              color: Color.fromRGBO(239, 108, 129, 1),
              fontWeight: FontWeight.w400),
          titleMedium: TextStyle(
              color: Color.fromRGBO(67, 204, 195, 1),
              fontWeight: FontWeight.normal),
          bodyLarge: TextStyle(
              color: Color.fromRGBO(153, 153, 153, 1),
              fontWeight: FontWeight.w500),
          bodyMedium:
              TextStyle(color: Color(0xff555555), fontWeight: FontWeight.w500),
          bodySmall: TextStyle(
              color: Color.fromRGBO(255, 255, 255, 1),
              fontWeight: FontWeight.w500),
          titleSmall: TextStyle(
              color: Color.fromRGBO(19, 173, 143, 1),
              fontSize: 12,
              fontWeight: FontWeight.w400),
        ));
  }

  ///暗黑主题
  static darkTheme() {
    return ThemeData(
        primarySwatch: Colors.indigo,
        primaryColor: const Color.fromRGBO(132, 148, 255, 1),
        primaryColorLight: Colors.white,
        primaryColorDark: Colors.white,
        brightness: Brightness.light,
        primaryColorBrightness: Brightness.dark,
        visualDensity: VisualDensity.adaptivePlatformDensity,
        hoverColor: const Color.fromRGBO(0, 110, 255, 0.2),
        backgroundColor: const Color.fromRGBO(32, 30, 30, 1),
        unselectedWidgetColor: const Color.fromRGBO(89, 89, 89, 1),
        selectedRowColor: const Color.fromRGBO(255, 255, 255, 1),
        canvasColor: Colors.grey[50],
        scaffoldBackgroundColor: const Color.fromRGBO(9, 9, 9, 1),
        hintColor: const Color.fromRGBO(201, 201, 201, 1),
        cardColor: const Color.fromRGBO(19, 19, 19, 1),
        cardTheme: const CardTheme(
          shadowColor: Color.fromRGBO(37, 37, 37, 0.3),
        ),
        iconTheme: const IconThemeData(color: Color.fromRGBO(255, 255, 255, 1)),
        primaryIconTheme:
            const IconThemeData(color: Color.fromRGBO(255, 255, 255, 1)),
        tabBarTheme: const TabBarTheme(
          labelColor: Colors.white,
          unselectedLabelColor: Color(0xFF999999),
        ),
        textTheme: TextTheme(
            displayLarge: const TextStyle(
                color: Color(0xff555555), fontWeight: FontWeight.bold),
            displayMedium: const TextStyle(
                color: Color.fromRGBO(255, 255, 255, 1),
                fontWeight: FontWeight.w400),
            displaySmall: const TextStyle(
                color: Color.fromRGBO(114, 141, 175, 1),
                fontWeight: FontWeight.bold),
            headlineMedium: const TextStyle(
                color: Color.fromRGBO(51, 109, 243, 1),
                fontWeight: FontWeight.w400),
            headlineSmall: const TextStyle(
                color: Colors.white, fontWeight: FontWeight.bold),
            titleLarge: const TextStyle(
                color: Colors.white, fontWeight: FontWeight.w400),
            titleMedium: const TextStyle(
                color: Color.fromRGBO(73, 31, 6, 1),
                fontWeight: FontWeight.w500),
            bodyMedium: const TextStyle(
                color: Colors.white, fontWeight: FontWeight.w500),
            titleSmall: const TextStyle(
                color: Color.fromRGBO(9, 161, 102, 1),
                fontWeight: FontWeight.w400),
            bodyLarge: TextStyle(
                color: const Color.fromRGBO(231, 62, 89, 1).withOpacity(0.6),
                fontWeight: FontWeight.bold)));
  }
}
